package cc.siyecao.mapper.service;

import java.io.Serializable;
import java.util.Collection;
import java.util.List;

public interface BatchService<T, ID extends Serializable> {
    /**
     * 批量保存实体，需要数据库支持批量插入的语法
     *
     * @param entityList 实体列表
     * @return 结果数等于 entityList.size() 时成功，不相等时失败
     */
    int saveBatch(List<T> entityList);

    /**
     * 批量更新实体，需要数据库支持批量插入的语法
     *
     * @param entityList 实体列表
     * @return 结果数等于 entityList.size() 时成功，不相等时失败
     */
    int updateBatch(List<T> entityList);

    /**
     * 批量更新实体非空字段，需要数据库支持批量插入的语法
     *
     * @param entityList 实体列表
     * @return 结果数等于 entityList.size() 时成功，不相等时失败
     */
    int updateBatchSelective(List<T> entityList);

    /**
     * 根据ID批量删除实体，需要数据库支持批量插入的语法
     *
     * @param idList 实体列表
     * @return 结果数等于 idList.size() 时成功，不相等时失败
     */
    int removeBatchIds(Collection<ID> idList);

    /**
     * 根据ID批量删除实体，需要数据库支持批量插入的语法
     *
     * @param ids 实体列表
     * @return 结果数等于 idList.size() 时成功，不相等时失败
     */
    int removeBatchIds(ID... ids);

    /**
     * 根据ID批量查询实体，需要数据库支持批量插入的语法
     *
     * @param idList 实体列表
     * @return
     */
    List<T> findByIds(Collection<ID> idList);

    /**
     * 根据ID批量查询实体，需要数据库支持批量插入的语法
     *
     * @param ids 实体列表
     * @return
     */
    List<T> findByIds(ID... ids);
}
